package com.codefish;

public class transform0521 {

    public static void main(String[] args) {

        System.out.println(1024); //默认int(整数型)类型
        System.out.println(3.14); /////默认double(双精度浮点数)类型


/*
//////////////////////////////////////////////////////////////////////////////////
双浮点数和单浮点数的区别和应用我不懂QTQ...
照讲的应该是3.1是单精度，3.14是双精度
但我发现大部分游戏坐标都是使用的单浮点数的格式，却是很长的一大串小数，这是不是和几字节之类的有关系？？
///////////////////////////////////////////////////////////////////////////////////
 */

        /*
        自动类型转换
        1.特点：代码不需要进行特殊处理，自动完成。
        2.规则：数据范围从小到大。
         */

        long num1 = 100L;
        System.out.println(num1); //100

        //左边是long(长整数型)类型，右边是默认的int(整数型)类型
        //=将右侧的Int常量赋值给左侧的long存储，符合了数据范围从小到大的要求，发生自动类型转换。
        long num2 = 100;
        System.out.println(num2); //100

        //左边是double(双浮点数)类型，右边float(单浮点数)类型，符合从小到大规则，发生自动类型转换。
        double num3 = 2.5F;
        System.out.println(num3);

        //左边是float(单浮点数)类型，右边是long(长整型)类型,符合从小到大规则，发生自动类型转换。
        float num4 = 30L;
        System.out.println(num4);

        //所以从小到大是 字节型<短整形<单浮点数<双浮点数<整型<长整型 这个顺序吗？？


        /*
        强制类型转换
        1.特点：代码需要进行特殊的格式处理，不能自动完成。
        2.格式：范围小的类型 范围小的变量名 = (范围小的类型)原本范围大的数据。

        注意事项：
        1.强制类型转换一般不推荐使用，因为有可能发生精度损失、数据溢出。
        2.byte(字节型)/short(短整型)/char(字符型)这三种类型都可以发生数学运算，例如加法"+".
        3.byte/short/char这三种类型在运算的时候，都会被首先提升为int类型，然后再计算。
        4.boolean类型不能发生数据类型转换

         */
        int num = 100;
        System.out.println(num); //100

        int num5 = (int)100L;
        System.out.println(num5);

        int num6 = (int)6000000000L;
        System.out.println(num6);  //1705032704 (数据溢出)

        int num7 = (int)3.5;
        System.out.println(num7); //3 (精度损失) 不是四舍五入，所有的小数位都会被舍掉

        char zifu1 = 'A';
        System.out.println(zifu1+1); //66,大写字母A被当做65处理，A的按键码 = 65
        //一旦char类型进行了数学运算，那么字符就会按照一定的规则翻译成为一个数字

        byte num8 = 40;
        byte num9 = 50;
        // byte result1 = num8 + num9;        result(结果)
        //System.out.println(result1);

        //byte + byte --> int + int = int
        int result1 = num8 + num9;
        System.out.println(result1); //90


        short num10 = 60;
        //byte + short --> int + int = int
        int result2 = num8 + num10;
        System.out.println(result2); //100

        short result3 = (short)(num8 + num10);
        System.out.println(result3); //100


/*
不注释掉不让上传..
        char zifu2 ='1';
        System.out.println(zifu2 + 0); //49

        char zifu3 = 'C';
        int num11 = zifu3;
        System.out.println(num11); //67


        char zifu4 = '孙';
        System.out.println(zifu4 + 0); //23385
        char zifu5 = '瑜';
        System.out.println(zifu5 + 0); //29788

*/



        /*
        ASCII码表：美国信息交换标准代码
        Unicode码表：万国码，也是数字和符号的对照关系，开头0-127部分和ASCII完全一样，但是从128开始包含有更多字符
        需要记住的三个开头键码：
        48 - ‘0’
        65 - ‘A’
        98 - 'a'

         */

        double dA =  0.123456719D;
        System.out.println("dA  : " + dA);
        float floatA = (float) dA;
        System.out.println("float : " + floatA);

        // todo 问题

        if (floatA > 1){
            functionA();
        }else {
            functionB();
        }

    }


    private static void functionA(){
        System.out.println("functionA");
    }
    private static void functionB(){
        System.out.println("functionB");
    }
}
